package jogo;

/**
 * Essa classe é responsável por todo o controle do jogo de Freecell.
 * Todas as açoes referentes ao jogo, o iniciar jogo, parabenizar jogador, mover cartas de locais,
 * entre outros, são manipulados por essa classe.
 * @author User
 */
public class Freecell extends Jogo {

    Baralho baralho = new Baralho();
    //Inicialização de todas as pilhas
    public Fundacao fundacao1 = new Fundacao();
    public Fundacao fundacao2 = new Fundacao();
    public Fundacao fundacao3 = new Fundacao();
    public Fundacao fundacao4 = new Fundacao();
    public Fileiras fileira1 = new Fileiras(7);
    public Fileiras fileira2 = new Fileiras(7);
    public Fileiras fileira3 = new Fileiras(7);
    public Fileiras fileira4 = new Fileiras(7);
    public Fileiras fileira5 = new Fileiras(6);
    public Fileiras fileira6 = new Fileiras(6);
    public Fileiras fileira7 = new Fileiras(6);
    public Fileiras fileira8 = new Fileiras(6);
    public CelulaLivre celula1 = new CelulaLivre();
    public CelulaLivre celula2 = new CelulaLivre();
    public CelulaLivre celula3 = new CelulaLivre();
    public CelulaLivre celula4 = new CelulaLivre();

    /**
     * Metodo responsável por iniciar o jogo de Freecell.
     * Atribuir o baralho, embaralhar, distribuir as cartas e criar as pilhas.
     */
    @Override
    public void iniciarJogo() {

        //Cria, inicializa e embaralho o baralho

        this.baralho.inicializaBaralho();
        this.baralho.embaralhaBaralho();

        distribuirCartas(fileira1, this.baralho, 0, 7);
        distribuirCartas(fileira2, this.baralho, 7, 14);
        distribuirCartas(fileira3, this.baralho, 14, 21);
        distribuirCartas(fileira4, this.baralho, 21, 28);
        distribuirCartas(fileira5, this.baralho, 28, 34);
        distribuirCartas(fileira6, this.baralho, 34, 40);
        distribuirCartas(fileira7, this.baralho, 40, 46);
        distribuirCartas(fileira8, this.baralho, 46, 52);

    }

    /**
     * Metodo responsável por verificar a quantidade de celulas livres que encontram-se vazias
     * @return inteiro referente ao número de celulas vazias
     */
    public int verificarNumeroDeCelulasVazias() {
        int quantidade;
        quantidade = celula1.getPilha().size()
                + celula2.getPilha().size()
                + celula3.getPilha().size()
                + celula4.getPilha().size();
        return quantidade;

    }

    /**
     * Metodo responsável por informar ao usuári que o mesmo venceu o jogo
     */
    @Override
    public void parabenizar() {
        System.out.println("Parabéns, Você finalizou o jogo");

    }

    /**
     * Metodo que encerra o programa.
     */
    @Override
    public void encerrarPrograma() {
        System.exit(0);

    }
}
